์ž‘์„ฑ: 2026-03-04 02:23:35์ˆ˜์ •: 2026-03-04 04:03:38

Java Swing ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ: ์ฒซ ๋ฒˆ์งธ ์œˆ๋„์šฐ ๋„์šฐ๊ธฐ

์ž๋ฐ” ์Šค์œ™(Java Swing)์€ JDK์— ๊ธฐ๋ณธ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋ณ„๋„์˜ ๋ณต์žกํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ ์—†์ด ๋ฐ”๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค. 2026๋…„ ๊ธฐ์ค€ ์ตœ์‹  JDK ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์Šค์œ™ ํ”„๋กœ์ ํŠธ ์„ค์ •๊ณผ ์ฒซ ์‹คํ–‰ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ค€๋น„

  • JDK: ์ตœ์‹  LTS ๋ฒ„์ „(Java 17, 21, 25 ๋“ฑ)์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • IDE: IntelliJ IDEA, Eclipse, ํ˜น์€ VS Code ๋“ฑ ์–ด๋–ค ๋„๊ตฌ๋“  ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ๋„๊ตฌ (์„ ํƒ ์‚ฌํ•ญ): Maven์ด๋‚˜ Gradle์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

2. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ ์„ค์ •

๋ฐฉ๋ฒ• A: Maven ์‚ฌ์šฉ ์‹œ

pom.xml์— ์ž๋ฐ” ๋ฒ„์ „์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. (Swing์€ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฏ€๋กœ ๋ณ„๋„์˜ dependency๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.)

<properties>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
</properties>

๋ฐฉ๋ฒ• B: Gradle ์‚ฌ์šฉ ์‹œ (๊ถŒ์žฅ)

build.gradle ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

plugins {
    id 'java'
}
 
group = 'com.example'
version = '1.0-SNAPSHOT'
 
repositories {
    mavenCentral()
}
 
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

3. ์ฒซ ๋ฒˆ์งธ Swing ์ฝ”๋“œ ์ž‘์„ฑ

Main.java ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์Šค์œ™ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ **EDT(Event Dispatch Thread)**๋ฅผ ํ†ตํ•ด UI๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

HelloSwing.java

import javax.swing.*;
 
public class HelloSwing {
    public static void main(String[] args) {
        // UI ์ž‘์—…์„ EDT(Event Dispatch Thread)์—์„œ ์‹คํ–‰ํ•˜๋„๋ก ์š”์ฒญ
        SwingUtilities.invokeLater(() -> {
            createAndShowGUI();
        });
    }
 
    private static void createAndShowGUI() {
        // 1. ์œˆ๋„์šฐ ํ”„๋ ˆ์ž„ ์ƒ์„ฑ
        JFrame frame = new JFrame("My First Swing App");
        
        // 2. ๋‹ซ๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํ”„๋กœ๊ทธ๋žจ๋„ ์ข…๋ฃŒ๋˜๋„๋ก ์„ค์ •
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // 3. ์œˆ๋„์šฐ ํฌ๊ธฐ ์„ค์ • (๊ฐ€๋กœ, ์„ธ๋กœ)
        frame.setSize(400, 300);
 
        // 4. ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ (๋ผ๋ฒจ ํ•˜๋‚˜ ์ถ”๊ฐ€)
        JLabel label = new JLabel("Hello, Java Swing!", SwingConstants.CENTER);
        frame.add(label);
 
        // 5. ์œˆ๋„์šฐ๋ฅผ ํ™”๋ฉด ์ค‘์•™์— ๋ฐฐ์น˜
        frame.setLocationRelativeTo(null);
 
        // 6. ์œˆ๋„์šฐ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œ
        frame.setVisible(true);
    }
}

4. ์ฝ”๋“œ ์„ค๋ช…: ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ ๋ถ„์„

JFrame

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”์ธ ์œˆ๋„์šฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์ œ๋ชฉ ํ‘œ์‹œ์ค„, ์ตœ์†Œํ™”/์ตœ๋Œ€ํ™” ๋ฒ„ํŠผ, ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE): ์ด ์„ค์ •์ด ์—†์œผ๋ฉด ์œˆ๋„์šฐ๋ฅผ ๋‹ซ์•„๋„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž๋ฐ” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

SwingUtilities.invokeLater(...)

  • ์Šค์œ™์˜ ๋ชจ๋“  UI ์ž‘์—…์€ ์ „์šฉ ์Šค๋ ˆ๋“œ(EDT)์—์„œ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ƒ์„ฑ๋œ ์ž‘์—…์„ ์•ˆ์ „ํ•˜๊ฒŒ EDT๋กœ ๋„˜๊ฒจ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JLabel

  • ํ™”๋ฉด์— ํ…์ŠคํŠธ๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.

5. ์‹คํ–‰ ๋ฐ ํ™•์ธ

์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ค‘์•™์— "Hello, Java Swing!"์ด๋ผ๋Š” ๊ธ€์ž๊ฐ€ ์ ํžŒ 400x300 ํฌ๊ธฐ์˜ ์œˆ๋„์šฐ๊ฐ€ ํŒ์—…๋ฉ๋‹ˆ๋‹ค.

์ด์ œ ์—ฌ๊ธฐ์— ๋ฒ„ํŠผ(JButton), ์ž…๋ ฅ์ฐฝ(JTextField), ์ฒดํฌ๋ฐ•์Šค(JCheckBox) ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉฐ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•ด ๋ณด์„ธ์š”. ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋Š” frame.add()๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์— ๋ถ™์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ ˆ์ด์•„์›ƒ ๋งค๋‹ˆ์ €(LayoutManager)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์ •๊ตํ•˜๊ฒŒ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„ ์ œ์•ˆ

  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ: ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์•Œ๋ฆผ์ฐฝ(JOptionPane) ๋„์šฐ๊ธฐ.
  • ๋ ˆ์ด์•„์›ƒ: BorderLayout์ด๋‚˜ FlowLayout ์ดํ•ดํ•˜๊ธฐ.
  • ๋ฐ์ดํ„ฐ ์—ฐ๋™: ์ž…๋ ฅ์ฐฝ์— ์“ด ๊ธ€์ž๋ฅผ ๋ผ๋ฒจ๋กœ ์˜ฎ๊ธฐ๊ธฐ.

์ด์ œ ๋‹น์‹ ์˜ ์ฒซ ๋ฒˆ์งธ ์ž๋ฐ” ๋ฐ์Šคํฌํ†ฑ ์•ฑ์ด ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!